package handler

import (
	v1 "docker-api/api/v1"
	"docker-api/internal/service"
	"github.com/gin-gonic/gin"
	"net/http"
)

type DockerInfoHandler struct {
	*Handler
	dockerInfoService service.DockerInfoService
}

func NewDockerInfoHandler(
	handler *Handler,
	dockerInfoService service.DockerInfoService,
) *DockerInfoHandler {
	return &DockerInfoHandler{
		Handler:           handler,
		dockerInfoService: dockerInfoService,
	}
}

// GetDockerVersion godoc
// @Summary 获取 Docker 版本信息
// @Schemes
// @Description
// @Tags docker基础信息
// @Accept json
// @Produce json
// @Success 200 {object} v1.Response
// @Router /docker/version [GET]
func (h *DockerInfoHandler) GetDockerVersion(ctx *gin.Context) {
	version, err := h.dockerInfoService.GetDockerVersion(ctx)
	if err != nil {
		v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
		return
	}
	v1.HandleSuccess(ctx, version)
}

// GetDockerStatus godoc
// @Summary 获取 Docker 服务状态
// @Schemes
// @Description
// @Tags docker基础信息
// @Accept json
// @Produce json
// @Success 200 {object} v1.Response
// @Router /docker/status [GET]
func (h *DockerInfoHandler) GetDockerStatus(ctx *gin.Context) {
	status, err := h.dockerInfoService.GetDockerStatus(ctx)
	if err != nil {
		v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrBadRequest, nil)
		return
	}
	v1.HandleSuccess(ctx, status)
}

// GetDockerDoc godoc
// @Summary 获取 Docker 文档
// @Schemes
// @Description
// @Tags docker基础信息
// @Accept json
// @Produce json
// @Success 200 {object} v1.Response
// @Router /docker/doc [GET]
func (h *DockerInfoHandler) GetDockerDoc(ctx *gin.Context) {
	status, err := h.dockerInfoService.GetDockerDocs(ctx)
	if err != nil {
		v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrBadRequest, nil)
		return
	}
	v1.HandleSuccess(ctx, status)
}
